﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HAINGUYEN_HOTEL.Helper;
using Hotel.Domain;
using Hotel.Util;
using HOTEL.Dao;

namespace HAINGUYEN_HOTEL
{
    public partial class RoomOder : System.Web.UI.Page
    {
        private PhongDao pDao = new PhongDao();
        protected void Page_Load(object sender, EventArgs e)
        {
            gvList.AutoGenerateColumns = false;
            if (!Page.IsPostBack)
            {
                object from = Session["from"];
                object to = Session["to"];
                if (from != null)
                {
                    this.txtNgayDen.Text = Session["from"] as string;
                }
                if (to != null)
                {
                    this.txtNgayDi.Text = Session["to"] as string;
                }
                
                BindToData();
            }
        }
        protected void BindToData()
        {
            if (Session[SessionKey.MyRoom] != null)
            {
                var list = Session[SessionKey.MyRoom] as List<MyRoom>;
                if (list.Count == 0)
                {
                    divhavenoroom.Visible = true ;
                    divhaveroom.Visible = false;
                    upInfor.Update();
                    return;
                }
                gvList.DataSource = list;
                gvList.DataBind();
                
                lbTongTien.Text = String.Format("{0:0,0}", list.Sum(p => (p.SoLuong * p.Gia)).Value);
                divhavenoroom.Visible = false;
                divhaveroom.Visible = true;
                upInfor.Update();
            }
            else
            {
                divhavenoroom.Visible = true;
                divhaveroom.Visible = false;
                upInfor.Update();
            }
        }

        protected void gvList_RowDataBound(object sender, GridViewRowEventArgs e)
        {

        }

        protected void gvList_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            var data = e.CommandArgument.ToString();
            var datasplit = data.Split('-');
            var require = e.CommandName;
            switch (require)
            {

                case "DeleteItem":
                    {
                        var list = Session[SessionKey.MyRoom] as List<MyRoom>;
                        var item = list.Where(p => p.MaLoaiPhong.Equals(int.Parse(datasplit[0]))
                            && p.MaHangPhong.Value.Equals(int.Parse(datasplit[1]))).SingleOrDefault();
                        if (item != null)
                        {
                            list.Remove(item);
                            Session[SessionKey.MyRoom] = list;
                            BindToData();
                            //Response.Redirect(Request.RawUrl, true);
                        }
                        break;
                    }
            }
        }

        protected void btnPreview_Click(object sender, EventArgs e)
        {
            if (Session[SessionKey.MyRoom] != null)
            {
                var list = Session[SessionKey.MyRoom] as List<MyRoom>;
                for (int i = 0; i < gvList.Rows.Count; i++)
                {
                    var txtsoluong = gvList.Rows[i].FindControl("txtSoLuong") as TextBox;
                    if (txtsoluong != null)
                    {
                        var songuoiinrom=list[i].SoNguoi/list[i].SoLuong;
                        list[i].SoLuong = int.Parse(txtsoluong.Text.Trim());
                        list[i].SoNguoi = songuoiinrom * list[i].SoLuong;
                    }
                }
                gvList.DataSource = null;
                gvList.DataBind();
                
                Session[SessionKey.MyRoom] = list;
                BindToData();
                Response.Redirect(Request.RawUrl, true);
            }
        }
        protected string IsValidData()
        {
            string result = "";
            if (String.IsNullOrEmpty(txtTenKH.Text.Trim()))
            {
                result += "Tên khách hàng không được trống.";
            }
            if (string.IsNullOrEmpty(txtCMND.Text.Trim()))
            {
                result += "Chứng minh không được trống.\n";
            }
            var tungay = ConvertUtil.ToDateTime(txtNgayDen.Text.Trim());
            if (!tungay.HasValue)
            {
                result += "Ngày đến không hợp lệ.\n";
            }
            var denngay = ConvertUtil.ToDateTime(txtNgayDi.Text.Trim());
            if (!denngay.HasValue)
            {
                result += "Ngày đi không hợp lệ.\n";
            }
            if (tungay.HasValue && denngay.HasValue)
            {
                if (tungay > denngay)
                {
                    result += "Ngày đi phải lớn hơn hoặc bằng ngày đến.\n";
                }
            }
            return result;
        }
        protected void btnCheckOut_Click(object sender, EventArgs e)
        {
            var check = IsValidData();
            if (!String.IsNullOrEmpty(check))
            {
                lbError.Text = check;
                upInfor.Update();
                return;
            }
            if (Session[SessionKey.MyRoom] != null)
            {
                // kiểm tra xem có đủ phòng để đặt  hay không
                
                var list = Session[SessionKey.MyRoom] as List<MyRoom>;
                MyCart mycart = new MyCart
                {
                    TenDonHang=txtTenKH.Text.Trim(),
                    CMND=txtCMND.Text.Trim(),
                    TuNgay=ConvertUtil.ToDateTime(txtNgayDen.Text.Trim()).Value,
                    DenNgay=ConvertUtil.ToDateTime(txtNgayDi.Text.Trim()).Value,
                    TongTien = list.Sum(p => (p.SoLuong * p.Gia)).Value/Helper.Helper.CurrenToUSD,
                };
                var checking = pDao.CheckEnoughtOrder(list, mycart);
                if (checking == 0)
                {
                    lbError.Text = "Số phòng hiện đang không đáp ứng đủ yêu cầu.Vui lòng xem lại số lượng phòng đăt";
                    upInfor.Update();
                    return;
                }
                Session[SessionKey.MyCart] = mycart;
                Response.Redirect("PDT/PDTStart.aspx");
            }
        }
    }
}